Thoughtworks Radar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Thoughtworks Radar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

OWASP LLM Top 10 listesi

OWASP, yani "Açık Web Uygulama Güvenliği Projesi", web uygulamalarındaki en kritik güvenlik risklerini belirlemek için bir liste yayımlıyor. Bu liste, OWASP Top 10 olarak biliniyor ve web uygulamaları için çok önemli bir güvenlik referansı. Ancak, sadece web uygulamaları için değil, başka alanlar için de benzer listeler yayımlıyorlar.



Örneğin, OWASP son zamanlarda LLM'ler, yani "Büyük Dil Modelleri" için de bir Top 10 listesi çıkardı. Bu liste, Ağustos ayının başlarında yayımlandı ve LLM uygulamalarını geliştiren bireyler ve ekipler için önemli riskleri içeriyor. Bu riskler arasında "komut enjeksiyonu", "güvensiz çıktı işleme", "eğitim verisi zehirlenmesi" gibi konular bulunuyor.


Ayrıca, OWASP API'ler için de bir Top 10 liste yayımladı. Bu listeler, web uygulamaları, API'ler, LLM'ler gibi geniş bir yelpazeyi kapsıyor ve sürekli değişen güvenlik ortamına oldukça uygun. Bu nedenle, önceki tavsiyemizi genişleterek, ekiplerin OWASP Top 10 listelerini görmezden gelmemeleri konusunda uyarıyoruz. Bu listeler, güvenli yazılım geliştirmek için çok önemli bilgiler içeriyor.

OWASP'ın Büyük Dil Modelleri (LLMs) için hazırladığı Top 10 listesini Türkçeye çevirelim:


LLM01: Komut Enjeksiyonu: Özel olarak hazırlanmış girdilerle LLM'leri manipüle etmek, yetkisiz erişime, veri ihlallerine ve karar verme süreçlerinin tehlikeye girmesine yol açabilir.


LLM02: Güvensiz Çıktı İşleme: LLM çıktılarının doğrulanmaması, sistemlerin tehlikeye girmesi ve verilerin ifşa edilmesi de dahil olmak üzere güvenlik açıklarına yol açabilir.


LLM03: Eğitim Verisi Zehirlenmesi: Eğitim verilerinin manipüle edilmesi, LLM modellerinin güvenlik, doğruluk veya etik davranış açısından tehlikeye girmesine neden olabilir.


LLM04: Model Hizmet Reddi: LLM'lere aşırı kaynak tüketen işlemler yüklemek, servis kesintilerine ve artan maliyetlere yol açabilir.


LLM05: Tedarik Zinciri Güvenlik Zaafiyetleri: Güvenliği ihlal edilmiş bileşenlere, hizmetlere veya veri kümelerine bağımlılık, sistem bütünlüğünü tehlikeye atarak veri ihlallerine ve sistem arızalarına neden olabilir.


LLM06: Hassas Bilgi İfşası: LLM çıktılarında hassas bilgilerin korunmasız bırakılması, hukuki sonuçlara veya rekabet avantajının kaybına yol açabilir.


LLM07: Güvensiz Eklenti Tasarımı: Güvenilir olmayan girdileri işleyen ve yetersiz erişim kontrolüne sahip LLM eklentileri, uzaktan kod yürütme gibi ciddi güvenlik açıklarına yol açabilir.


LLM08: Aşırı Yetkilendirme: LLM'lere kontrolsüz bir şekilde eylemde bulunma yetkisi verilmesi, güvenilirlik, gizlilik ve güven konularında istenmeyen sonuçlara yol açabilir.


LLM09: Aşırı Bağımlılık: LLM çıktılarını eleştirel bir şekilde değerlendirmemek, karar verme süreçlerinin tehlikeye girmesine, güvenlik açıklarına ve hukuki sorumluluklara yol açabilir.


LLM10: Model Hırsızlığı: Özgün büyük dil modellerine yetkisiz erişim, hırsızlık, rekabet avantajının kaybı ve hassas bilgilerin yayılması riskini taşır.


10 madde için örnek senaryo


Elbette, her bir OWASP LLM Top 10 maddesi için örnek senaryolar sunayım:


LLM01: Komut Enjeksiyonu


Senaryo: Bir kullanıcı, dil modeline zararlı bir komut gönderir ve model bu komutu işler. Bu, modelin içinde çalıştığı sistemde yetkisiz erişime veya veri ihlallerine yol açar.

LLM02: Güvensiz Çıktı İşleme


Senaryo: Bir şirket, dil modelinin ürettiği çıktıları doğrulamadan doğrudan ürün tanımları oluşturmak için kullanır. Bu çıktılardan bazıları zararlı içerik içerir ve müşterilerin cihazlarında güvenlik açıklarına neden olur.

LLM03: Eğitim Verisi Zehirlenmesi


Senaryo: Bir rakip şirket, dil modelinin eğitim verilerine zararlı içerikler ekler. Bu durum, modelin yanıltıcı veya zararlı yanıtlar vermesine ve güvenilirliğini kaybetmesine yol açar.

LLM04: Model Hizmet Reddi


Senaryo: Bir saldırgan, LLM'yi aşırı yükleyerek online müşteri hizmetleri platformunu çökertir, bu da şirketin müşteri hizmetleri operasyonlarını durdurur ve ek maliyetlere neden olur.

LLM05: Tedarik Zinciri Güvenlik Zaafiyetleri


Senaryo: Bir LLM sağlayıcısı, güvenlik açığı olan bir veri kümesini kullanır. Bu güvenlik açığı, şirketin sistemlerinde veri ihlallerine yol açar.

LLM06: Hassas Bilgi İfşası


Senaryo: Bir dil modeli, kullanıcıların kişisel bilgilerini yanlışlıkla ifşa eder, bu da şirketin gizlilik ihlalleri ve hukuki sorunlarla karşı karşıya kalmasına neden olur.

LLM07: Güvensiz Eklenti Tasarımı


Senaryo: Bir LLM eklentisi, güvensiz bir şekilde tasarlanmıştır ve saldırganların sisteme sızıp zararlı kod yürütmesine izin verir.

LLM08: Aşırı Yetkilendirme


Senaryo: Bir dil modeli, kontrolsüz kararlar alır ve bu, yanlış bilgilerin yayılmasına veya kullanıcıların gizliliğinin ihlaline yol açar.

LLM09: Aşırı Bağımlılık


Senaryo: Bir şirket, dil modelinin analiz sonuçlarına kritik kararlarında aşırı derecede güvenir ve bu, yanlış kararlar almasına ve güvenlik açıklarına neden olur.

LLM10: Model Hırsızlığı


Senaryo: Bir saldırgan, şirketin özel dil modeline erişir ve bu modeli kendi amaçları için kullanır ya da rakip şirketlere satar, bu da şirketin rekabet avantajını ve fikri mülkiyetini kaybetmesine yol açar.

Lokal LLM - Self-hosted LLMs

Büyük dil modelleri (LLM), genellikle çalıştırmak için ciddi derecede GPU (grafik işlem birimi) altyapısına ihtiyaç duyar. Ancak, bu modellerin daha mütevazı donanımlar üzerinde çalışabilmesi için yoğun bir çaba var. Bir modelin "kuantizasyonu" adı verilen bir işlemle, modelin bellek gereksinimleri azaltılabilir. Bu sayede, daha ucuz donanımlar veya hatta sadece bir CPU (merkezi işlem birimi) üzerinde yüksek kaliteli bir model çalıştırılabilir. "llama.cpp" gibi girişimler sayesinde, büyük dil modelleri Raspberry Pi'ler, dizüstü bilgisayarlar ve standart sunucular gibi donanımlarda çalıştırılabilir.





Birçok kuruluş, güvenlik veya gizlilik endişeleri nedeniyle ya da bazen modelleri kenar cihazlarda (edge devices) çalıştırma ihtiyacı nedeniyle kendi büyük dil modellerini barındırıyor. Açık kaynaklı örnekler arasında GPT-J, GPT-Neo ve Llama bulunuyor. Bu yaklaşım, belirli bir kullanım durumu için modele daha iyi ayar yapma, geliştirilmiş güvenlik ve gizlilik ile çevrimdışı erişim imkanı sunar. Kod tamamlama için bazı müşterilerimizin açık kaynaklı LLM'leri kendileri barındırmalarına yardımcı olduk ancak, böyle bir LLM'yi kendi bünyenizde barındırmadan önce kurumsal yeteneklerinizi ve bu tür LLM'leri çalıştırmanın maliyetini dikkatlice değerlendirmenizi öneririz.


Örnek bir senaryo verir misin?


Tabii, işte büyük dil modellerinin (LLM) kullanımına yönelik basit bir senaryo:


Senaryo: Sağlık Sektöründe Veri Gizliliği için Kendi Bünyesinde LLM Barındıran Bir Hastane


Kurum: Bir hastane, hasta kayıtları ve sağlık verileri üzerinde çalışan bir yapay zeka (AI) sistemine ihtiyaç duyar.

Gereksinim: Hastane, bu verilerin gizliliğini korumak istediğinden, verilerin dışarıya sızmasını önlemek adına kendi sunucularında bir LLM barındırmaya karar verir.

Çözüm: Hastane, GPT-J gibi açık kaynak bir LLM seçer ve bu modeli, hastanenin kendi veri merkezinde bulunan sunuculara kurar.

Uygulama: Model, hasta kayıtlarını analiz eder, doktorlara teşhis koymada yardımcı olur ve tıbbi araştırmalar için veri sağlar. Hastane personeli, modeli özel ihtiyaçlarına göre ayarlayabilir (fine-tuning).

Avantajlar:

Gizlilik: Hasta verileri hastanenin kendi ağı içinde kalır, dışarı sızma riski azalır.

Özelleştirme: Model, hastanenin spesifik ihtiyaçlarına göre özelleştirilir.

Çevrimdışı Erişim: İnternet bağlantısı olmadan da model çalışabilir, bu da sistem kesintilerinde avantaj sağlar.

Değerlendirme: Hastane, bu sistemin kurulum ve işletme maliyetlerini, sağladığı faydalarla kıyaslayarak modelin verimliliğini ve uygulanabilirliğini değerlendirir.

Bu senaryo, bir kurumun neden kendi bünyesinde bir LLM barındırmayı tercih edebileceğini ve bunun nasıl gerçekleştirilebileceğini basit bir şekilde açıklar.

Platform orkestrasyonu - Platform orchestration

Platform mühendisliğinin yaygınlaşmasıyla birlikte, geleneksel platform-as-a-service (PaaS) modelinin ötesine geçen ve geliştiricilerle platform ekipleri arasında yayımlanan sözleşmeler sunan yeni nesil araçlar ortaya çıktı. Bu sözleşmeler, bulut ortamlarının, veritabanlarının, izlemenin, kimlik doğrulamanın ve daha fazlasının farklı ortamlarda sağlanmasını içerebilir. Bu araçlar, organizasyon standartlarını uygularken, geliştiricilere yapılandırma yoluyla çeşitliliklere kendilerinin hizmet etmesine izin verir. Bu platform orkestrasyon sistemlerine örnek olarak Kratix ve Humanitec Platform Orchestrator verilebilir. Platform ekiplerine, kendi benzersiz betiklerinizi, yerel araçlarınızı ve altyapı kodunuzu bir araya getirmek yerine bu araçları değerlendirmelerini öneririz. Ayrıca, Open Application Model (OAM) kavramları ve referans orkestratörü KubeVela ile benzerlikler fark ettik, ancak OAM daha çok uygulama merkezli olduğunu iddia ediyor ve iş yükü merkezli değil.



Bu durumu basit bir şekilde açıklamak gerekirse, bu yeni araçlar, geliştiricilere daha fazla esneklik sunarken aynı zamanda kurumsal standartları koruyan bir yol sunuyor. Artık geliştiriciler, kendi ihtiyaçlarına göre farklı teknolojik çözümleri, belirli kurallar çerçevesinde özgürce yapılandırabilir ve kullanabilirler. Bu, hem verimliliği artırıyor hem de daha düzenli ve standart bir çalışma ortamı sağlıyor.


Örnek bir senaryo verir misin?


Tabii ki, örnek bir senaryo vererek bu konsepti daha iyi anlamanıza yardımcı olabilirim.


Senaryo: Bir Yazılım Geliştirme Şirketi


Durum: Bir yazılım geliştirme şirketinde çalışıyorsunuz ve şirketiniz, çeşitli müşteriler için web uygulamaları ve hizmetleri geliştiriyor. Her müşterinin ihtiyaçları farklı ve her proje için farklı teknolojiler, veritabanları ve bulut hizmetleri kullanmanız gerekiyor.


Sorun: Daha önce, her yeni proje için, geliştirme ekibinizin IT departmanıyla iletişim kurması ve gerekli ortamların, veritabanlarının ve diğer kaynakların manuel olarak kurulması gerekiyordu. Bu süreç zaman alıcı ve hata yapmaya açıktı.


Çözüm: Platform Orkestrasyon Araçları Kullanımı


Standartlaştırılmış İş Akışları: Şirketiniz, Kratix veya Humanitec gibi bir platform orkestrasyon aracı kullanmaya başlıyor. Bu araçlar, bulut ortamlarını, veritabanlarını ve diğer hizmetleri hızlı ve hatasız bir şekilde kurmak için standartlaştırılmış iş akışları sağlıyor.


Yayımlanan Sözleşmeler: Platform ekibi, geliştiricilerin ihtiyaç duyduğu her türlü kaynağı sağlamak için "sözleşmeler" yayımlıyor. Bu sözleşmeler, hangi kaynakların kullanılabileceği, nasıl yapılandırılacağı ve nasıl erişileceği konusunda net kurallar içeriyor.


Geliştirici Özgürlüğü ve Kendi Kendine Hizmet: Geliştiriciler artık IT departmanına bağımlı kalmadan, ihtiyaç duydukları kaynakları bu platform üzerinden doğrudan talep edebiliyorlar. Örneğin, bir proje için özel bir veritabanı gerekiyorsa, bu veritabanını platform üzerinden hızlıca kurabilir ve yapılandırabilirler.


Verimlilik ve Uyumluluk: Bu sistem, projelerin daha hızlı başlamasını ve daha az hata ile ilerlemesini sağlıyor. Ayrıca, tüm projeler şirketin teknolojik standartlarına ve güvenlik politikalarına uygun şekilde yürütülüyor.


Bu senaryo, platform orkestrasyon araçlarının nasıl kullanılabileceğini ve bir şirketin çalışma şeklini nasıl dönüştürebileceğini örneklemektedir. Bu araçlar, hem geliştiricilere esneklik ve özgürlük sunarken hem de şirketin genel verimliliğini ve standartlarını korumayı sağlar.


Kratix, platform orkestrasyonunda kullanılan bir araçtır ve temelde geliştiricilere, karmaşık bulut altyapılarını ve hizmetlerini daha kolay yönetmeleri için güçlü araçlar sunar. İşte Kratix'in nasıl çalıştığına dair bir örnek senaryo:


Senaryo: Çoklu Bulut Ortamlarında Uygulama Dağıtımı


Durum: Bir yazılım şirketinde çalışıyorsunuz ve müşterileriniz için çeşitli bulut sağlayıcıları üzerinde uygulamalar geliştiriyorsunuz. Her bulut sağlayıcısının kendi araçları ve yönetim panelleri var, bu da süreci karmaşık ve zaman alıcı hale getiriyor.


Kratix Kullanımı:


Ortak Arayüz: Kratix, çeşitli bulut sağlayıcıları için ortak bir arayüz sağlar. Bu, farklı bulut ortamlarını tek bir yerden yönetmenize olanak tanır.


Kaynak Yönetimi: Kratix üzerinden, farklı bulut ortamlarında gereken kaynakları (örneğin, sunucular, veritabanları, depolama alanları) kolayca oluşturabilir ve yönetebilirsiniz.


Otomasyon ve Skriptler: Kratix, süreçleri otomatikleştirmek için kullanabileceğiniz skriptler ve araçlar sunar. Örneğin, yeni bir müşteri projesi için gereken tüm kaynakları birkaç komutla hızlıca ayarlayabilirsiniz.


Güvenlik ve Uyumluluk: Kratix, güvenlik ve uyumluluk standartlarınızı tüm bulut ortamlarında tutarlı bir şekilde uygulamanıza yardımcı olur. Bu, veri güvenliğini ve düzenlemelere uyumu kolaylaştırır.


Bu senaryoda, Kratix, farklı bulut sağlayıcıları arasında kolay geçiş yapmanıza, kaynakları hızla dağıtmanıza ve yönetmenize ve genel verimliliği artırmanıza yardımcı olur. Ayrıca, IT ekipleri ve geliştiriciler arasındaki işbirliğini güçlendirir ve süreçleri basitleştirir.

"Büyük Dil Modelleri tarafından desteklenen otonom ajanlar" - "LLM-powered autonomous agents"

 



"LLM-powered autonomous agents" yani "Büyük Dil Modelleri tarafından desteklenen otonom ajanlar" konusunu basit bir şekilde açıklayayım.


Bu tür ajanlar, büyük dil modelleri (LLM) kullanarak verilen görevleri anlama ve bu görevlere yönelik çalışma yeteneğine sahiptirler. Örnekler arasında AutoGPT, GPT-Engineer ve BabyAGI gibi sistemler bulunuyor. Bu ajanlar, hangi aşamada olduklarını hatırlar, bir sonraki adımları ne yapacaklarını düşünmek için dil modellerini kullanırlar, eylemlerde bulunurlar ve hedeflerine ulaşıp ulaşmadıklarını anlarlar. Buna "zincirleme düşünce akışı" denir ve gerçekten işe yarar.


Bir örnek olarak, bir ekip müşteri hizmetleri chatbot'unu bir otonom ajan olarak geliştirdi. Bu bot, müşterinin amacına ulaşamadığında kendi sınırlarını tanır ve müşteriyi bir insana yönlendirir. Ancak bu teknoloji hala gelişme aşamasındadır. Otonom ajanlar genellikle yüksek başarısızlık oranına sahiptir, pahalı yapay zeka servis ücretleri gerektirir ve en az bir yapay zeka başlangıcı bu ajan tabanlı yaklaşımdan vazgeçmiştir.


Kısacası, bu ajanlar verilen görevlere yönelik akıllıca çalışır, ancak hala gelişmekte olan bir teknolojidir ve bazı zorluklarla karşı karşıyadır.


Örnek bir senaryo verir misin?


Tabii, işte büyük dil modelleri tarafından desteklenen otonom bir ajanın kullanıldığı örnek bir senaryo:


Senaryo: Otonom Ajan ile Akıllı Ev Asistanı


Durum: Evde yaşayan bir kişi, akıllı ev asistanına (otonom ajan) akşam yemeği için alışveriş listesi hazırlamasını söyler.


Ajanın Görevi: Akşam yemeği için gerekli malzemeleri içeren bir alışveriş listesi oluşturmak.


Eylem Süreci:


Anlama ve Planlama: Ajan, kullanıcının tercihlerini ve daha önceki yemek tariflerini analiz eder. Ayrıca buzdolabı ve mutfak envanterini kontrol ederek eksik malzemeleri belirler.


Liste Oluşturma: Eksik malzemeleri belirledikten sonra, ajan bunları bir liste haline getirir. Liste, hem kullanıcının tercihlerine hem de sağlıklı beslenme gereksinimlerine uygun olacak şekilde ayarlanır.


Geri Bildirim ve Onay: Ajan, oluşturduğu listeyi kullanıcıya gösterir ve onayını ister. Kullanıcı isteğe bağlı değişiklikler yapabilir.


Eylemde Bulunma: Kullanıcı listeyi onayladıktan sonra, ajan çevrimiçi bir market servisiyle entegre olabilir ve alışveriş listesini sipariş olarak gönderebilir.


Sonuç ve Öğrenme: Alışveriş tamamlandığında, ajan kullanıcıdan geri bildirim alır ve gelecekte daha iyi hizmet verebilmek için bu bilgileri kullanır.


Bu senaryo, otonom ajanın nasıl bir süreçten geçtiğini ve bir görevi nasıl başarıyla tamamlayabileceğini göstermektedir. Ajan, durumu anlamak, plan yapmak, kullanıcı ile etkileşimde bulunmak, eylemde bulunmak ve öğrenmek için dil modelini kullanır. Ancak, bu tür ajanlar hala gelişmekte olduğundan, bazen hatalar yapabilir veya kullanıcının beklentilerini tam olarak karşılayamayabilir.

GitOps (örneğin, Argo CD veya Flux) Skaffold da gitops'a örnek midir?

GitOps'ı basit bir şekilde anlatayım:


Generated by DALL·E


GitOps, uygulamaların dağıtımını (yani internette çalışır hale getirilmesini) kolaylaştıran bir teknik. Bu teknik, uygulamanın ayarlarını bir Git deposu (yani kodların saklandığı yer) ile sürekli senkronize tutar. Bir nevi, uygulamanın şu anki durumu ile Git deposunda saklanan ayarlar arasında bir köprü kurar. Bu sayede, Git deposunda bir değişiklik yapıldığında, bu değişiklik otomatik olarak uygulamaya yansır.


GitOps'un dört ana ilkesi var. Bu ilkelere göre, GitOps, Kubernetes gibi sistemlerin işlevselliğinden faydalanarak uygulamaların ayarlarını ve dağıtım sürecinin uygulanmasını ayrı ayrı ele almayı sağlar. Yani, bir yandan uygulamanızın nasıl çalıştığını ayarlayabilirken, diğer yandan bu ayarların nasıl uygulamaya geçirileceğini kontrol edebilirsiniz.


Bir zamanlar GitOps hakkında biraz kafa karışıklığı vardı. Mesela, her ortam için ayrı bir dal (branch) kullanma gibi yaklaşımlar vardı. Bu da zamanla karmaşık ve yönetilmesi zor sistemlere yol açabilirdi. Ama şimdi GitOps'un ne olduğu daha net bir şekilde tanımlanıyor.


Sonuç olarak, GitOps, sürekli teslimatın (yani uygulamalarınızı sürekli ve düzenli olarak güncelleyip iyileştirmenin) bir parçası olarak kullanılabilecek faydalı bir tekniktir. Bazı ekiplerimiz bu tekniği kullanarak olumlu deneyimler yaşadı ve bu yüzden GitOps'u değerlendirmenizi öneriyoruz. Bu, uygulamanızın yönetimini ve güncellenmesini daha düzenli ve kontrollü bir hale getirebilir.


Örnek bir senaryo verir misin?


Tabii ki, GitOps kullanılarak gerçekleştirilebilecek örnek bir senaryoyu adım adım açıklayayım:


Senaryo: Web Uygulamasının Otomatik Güncellenmesi

Durum: Diyelim ki bir web uygulamanız var ve bu uygulamayı sürekli güncel tutmak istiyorsunuz. Uygulamanız bir Kubernetes cluster'ında çalışıyor ve kaynak kodları ile ayarları bir Git deposunda saklanıyor.


Adım 1: Kod Güncellemesi


Geliştiriciler, uygulamanın yeni bir özelliğini geliştiriyorlar veya bir hatayı düzeltiyorlar.

Bu değişiklikler, uygulamanın Git deposuna commit ediliyor.

Adım 2: Otomatik Senkronizasyon


GitOps aracı (örneğin, Argo CD veya Flux), Git deposundaki değişiklikleri sürekli olarak izliyor.

Git deposunda bir güncelleme olduğunda, bu araç otomatik olarak değişiklikleri algılayıp Kubernetes cluster'ına uyguluyor.

Adım 3: Dağıtım ve Güncelleme


Kubernetes cluster'ı, Git deposundaki yeni ayarları alıyor ve uygulamanın çalışma şeklini bu yeni ayarlar doğrultusunda güncelliyor.

Eğer gerekliyse, uygulamanın yeni sürümleri otomatik olarak oluşturuluyor ve eski sürümleriyle değiştiriliyor.

Adım 4: Sürekli İzleme ve Geri Alma


GitOps aracı, uygulamanın durumunu sürekli izler. Eğer bir sorun oluşursa, otomatik olarak son çalışan sürüme geri dönebilir.

Bu sayede, herhangi bir hata hızlı bir şekilde düzeltilmiş olur ve sistem kararlılığı korunur.

Sonuç:


Bu süreç sayesinde, uygulamanız sürekli güncel kalır ve herhangi bir manuel müdahaleye gerek kalmaz.

Geliştirme ve operasyon ekipleri arasındaki işbirliği ve koordinasyon artar, çünkü herkes aynı Git deposunu kullanarak çalışır.

Güncellemeler daha hızlı ve güvenli bir şekilde yapılır, çünkü her şey otomatikleştirilmiş ve izleniyor.

Bu senaryo, GitOps'un temel faydalarını - sürekli güncelleme, otomatikleştirme ve güvenlik - öne çıkarır. Uygulamanızın yönetimini ve güncellemelerini daha etkili ve verimli bir şekilde gerçekleştirmenizi sağlar.


Skaffold da gitops'a örnek midir?


Skaffold, GitOps'a tam olarak bir örnek değildir, ancak GitOps prensipleriyle uyumlu bir şekilde çalışabilir ve modern yazılım geliştirme süreçlerinde önemli bir rol oynar. Skaffold ve GitOps arasındaki farkları ve nasıl birlikte çalışabileceklerini açıklayayım:


Skaffold Nedir?

Geliştirme Odaklı: Skaffold, özellikle geliştirme aşamasında kullanılmak üzere tasarlanmıştır. Kod değişikliklerini otomatik olarak algılar ve bu değişiklikleri hızlı bir şekilde kubernetes cluster'ına uygular.

Hızlı İterasyonlar: Geliştiricilere, yazılım geliştirmenin hızlı iterasyonlarını sağlamak amacıyla, kod değişikliklerinin hemen test edilmesi ve dağıtılması için araçlar sunar.

Kolaylık ve Verimlilik: Skaffold, geliştiricilerin Kubernetes ortamlarında uygulamalarını daha kolay ve verimli bir şekilde geliştirmelerine olanak tanır.

GitOps Nedir?

Operasyon Odaklı: GitOps, genellikle operasyonel aşamada, yani uygulamanın canlı ortama taşınması ve yönetilmesi sürecinde kullanılır.

Otomasyon ve Senkronizasyon: GitOps, bir Git deposundaki değişiklikleri otomatik olarak algılar ve Kubernetes cluster'ında uygular. Bu, uygulamanın dağıtımını ve yönetimini otomatize eder.

Sürekli Teslimat ve Güvenlik: GitOps, sürekli teslimat ve güvenlik ilkelerine odaklanır, sistem durumunu Git deposundaki konfigürasyonlarla sürekli senkronize tutar.

Skaffold ve GitOps Birlikte Nasıl Çalışır?

Geliştirme Sürecinde Skaffold: Skaffold, geliştirme sürecinde hızlı ve etkin bir şekilde kullanılır. Geliştiriciler, kodlarını Skaffold ile hızla test edip Kubernetes'e uygularlar.

Operasyonel Sürecinde GitOps: Uygulama geliştirme tamamlandığında ve canlı ortama taşındığında, GitOps teknikleri devreye girer. Uygulamanın canlı ortamdaki yönetimi ve güncellemeleri GitOps araçları ile otomatize edilir.

Sonuç olarak, Skaffold ve GitOps farklı aşamalarda ve farklı amaçlar için kullanılan araçlardır, ancak birlikte çalışarak modern yazılım geliştirme ve dağıtım süreçlerinin her aşamasını desteklerler. Skaffold geliştirme sürecini hızlandırırken, GitOps operasyonel sürekliliği ve güvenliği sağlar.

"Tasarım sistemi karar kayıtları" - Design system decision records

Tabii, size "tasarım sistemi karar kayıtları" konseptini basit bir şekilde anlatayım.



Ürün geliştirme süreci hızlı ve sürekli değişen bir alan. Burada kullanıcı ihtiyaçları sürekli evriliyor, bu da tasarımın sürekli güncellenmesini gerektiriyor. Yani, tasarım kararları üzerine sürekli yeni görüşlere ihtiyaç duyuluyor.


Bilgisayar mimarisi kararlarını belgelemek için kullanılan "ADR" (Architecture Decision Record - Mimari Karar Kaydı) formatından esinlenerek, biz de "tasarım sistemi karar kayıtları" adını verdiğimiz benzer bir formatı benimsedik. Bu yöntem, tasarım sistemine ilişkin kararları, bu kararların gerekçelerini, araştırma bulgularını ve deney sonuçlarını kaydetmemizi sağlıyor.


Tasarım sistem kararlarını etkili bir şekilde iletmek, ürün geliştirme ekiplerinin karşılaştığı yeni bir ihtiyaç gibi görünüyor. Zeroheight gibi kaynaklar, bu tür hafif yöntemlerin kullanılmasını öneriyor. Bu teknik sayesinde, biz eğitim sürelerini azaltmayı, tartışmaları ileriye taşımayı ve aynı tasarım sistemini paylaşan iş akışlarını hizalamayı başardık.


Kısacası, bu yöntem tasarım kararlarını sistematik bir şekilde kaydederek, ekipler arasında daha hızlı ve etkili bir iletişim ve uyumu sağlamamıza yardımcı oluyor.

Örnek bir senaryo verir misin?

Elbette, bir örnek senaryo verebilirim. Diyelim ki bir teknoloji şirketinde çalışıyorsunuz ve şirketinizin web sitesinin tasarımını güncellemek istiyor. Bu süreçte "Tasarım Sistemi Karar Kayıtları" (Design System Decision Records - DSDR) kullanıyorsunuz:


Sorunun Belirlenmesi: Web sitesinin kullanıcı arayüzü eski ve kullanıcı deneyimi iyileştirilmeye ihtiyaç duyuyor.


Araştırma ve Fikir Üretme: Tasarım ekibi, kullanıcı araştırmaları yapıyor, rakip analizi gerçekleştiriyor ve yenilikçi tasarım önerileri sunuyor.


Tasarım Kararı: Ekibiniz, web sitesinin ana sayfasında büyük, etkileşimli bir slayt gösterisi eklemeye karar veriyor. Bu karar, kullanıcıların dikkatini çekmek ve önemli içerikleri öne çıkarmak için alındı.


DSDR Oluşturma: Bu karar, bir DSDR'de kaydediliyor. Kayıtta, kararın gerekçesi, yapılan kullanıcı araştırmaları, beklenen faydalar ve potansiyel riskler belirtiliyor.


Uygulama ve Geri Bildirim: Tasarım, web sitesine uygulanıyor ve kullanıcı geri bildirimleri toplanıyor. Kullanıcılar yeni tasarımı çekici ve etkileyici buluyor, bu da web sitesi ziyaret sürelerinin artmasına yol açıyor.


DSDR Güncellemesi ve Takip: Kullanıcı geri bildirimleri ve elde edilen sonuçlar, DSDR'ye ekleniyor. Bu, gelecekteki tasarım kararları için bir referans noktası oluşturuyor.


Bu senaryo, tasarım sistem karar kayıtlarının nasıl kullanılabileceğini ve bir tasarım değişikliğinin başlangıçtan sonuca kadar nasıl yönetilebileceğini gösteriyor. Bu süreç, ekip içi iletişimi ve karar alma süreçlerini iyileştiriyor, aynı zamanda gelecekte benzer projeler için değerli bilgiler sağlıyor.

"Paket halüsinasyonlarına" karşı bağımlılık sağlık kontrolleri yapmanın önemi -Dependency health checks to counter package hallucinations

 "Paket halüsinasyonlarına" karşı bağımlılık sağlık kontrolleri yapmanın önemini ve nasıl yapılacağını basit bir şekilde anlatayım.



Günümüzde yazılım geliştirme süreçlerinde yapay zeka tabanlı araçlar (GenAI araçları) giderek daha fazla kullanılıyor. Bu durum, yazılım tedarik zincirine yeni bir risk getiriyor: "paket halüsinasyonları". Bu, yapay zekanın gerçekte olmayan veya güvenilir olmayan yazılım paketlerini önermesi durumudur.


Bu riskle mücadele etmek için yazılım geliştirme takımları, kullanmayı düşündükleri paketler için "bağımlılık sağlık kontrolleri" yapmalıdır. Bu kontroller şunları içerebilir:


Oluşturulma Tarihi: Paketin ne zaman oluşturulduğuna bakın. Çok yeni bir paketse, daha dikkatli olmak gerekebilir.

İndirme Sayıları: Bir paketin ne kadar popüler olduğunu gösterir. Çok indirilmişse, genellikle daha güvenilirdir.

Yorumlar ve Yıldızlar: Kullanıcıların paket hakkında ne düşündüğüne ve verdiği puanlara bakın.

Katkıda Bulunanların Sayısı: Birden fazla katkıda bulunanı olan paketler, genellikle daha sağlıklı bir geliştirme sürecine sahiptir.

Aktivite Geçmişi: Paketin ne kadar sık güncellendiğini kontrol edin. Düzenli güncellemeler iyi bir işarettir.

Bu bilgiler genellikle paket depoları ve GitHub gibi platformlarda bulunabilir. Ayrıca, "deps.dev" ve "Snyk advisor" gibi araçlar da ek bilgiler sağlayabilir.


Kısacası, bir GenAI aracı tarafından önerilen bir paketi kullanmadan önce, bu bağımlılık sağlık kontrollerini yapmak, yazılım tedarik zincirindeki güvenliği artıracaktır. Bu yöntem yeni olmasa da, GenAI araçlarının kullanımının artmasıyla tekrar önem kazanmaktadır.





User

Örnek bir senaryo verir misin?

ChatGPT

Tabii ki, bir örnek senaryo verebilirim:


Senaryo: Yapay Zeka Tabanlı Kod Tamamlama Aracı ile Yazılım Geliştirmek


Farz edelim ki bir yazılım geliştirme ekibisiniz ve projeniz için bir kütüphane seçmeye çalışıyorsunuz. Ekip olarak, yapay zeka tabanlı bir kod tamamlama aracı kullanıyorsunuz. Bu araç, kodunuzu yazarken size çeşitli kütüphaneler öneriyor.


Durum Tespiti: Aracınız, bir görev için önerilen bir kütüphaneyi otomatik olarak öneriyor. Bu kütüphane, projenizdeki bir ihtiyacı karşılamak için ideal gibi görünüyor.


Bağımlılık Sağlık Kontrolü Başlatma: Bu noktada, ekibiniz bu kütüphanenin güvenilirliğini doğrulamak için bağımlılık sağlık kontrolleri yapmaya karar veriyor.


Kontrollerin Yapılması:


Oluşturulma Tarihi: Kütüphanenin GitHub sayfasına giderek, ilk ne zaman oluşturulduğunu kontrol ediyorsunuz.

İndirme Sayıları: npm veya PyPI gibi paket yönetim sistemlerinde kütüphanenin ne kadar popüler olduğuna bakıyorsunuz.

Yorumlar ve Yıldızlar: Kullanıcı yorumlarını ve kütüphaneye verilen yıldız sayısını inceliyorsunuz.

Katkıda Bulunanların Sayısı: GitHub'da kütüphanenin geliştirilmesine katkıda bulunan kişi sayısına bakıyorsunuz.

Aktivite Geçmişi: Son commit'lerin tarihine ve sıklığına göz atıyorsunuz.

Sonuçların Değerlendirilmesi: Tüm bu bilgileri topladıktan sonra, kütüphanenin güvenilir ve projeniz için uygun olup olmadığına karar veriyorsunuz. Eğer kütüphane yeni, az indirilmiş ve az katkıda bulunanı varsa, kullanmadan önce daha fazla araştırma yapmaya karar verebilirsiniz.


Bu örnek senaryoda, yapay zeka tabanlı bir aracın önerisi üzerine bir kütüphaneyi değerlendiriyorsunuz. Bağımlılık sağlık kontrolleri yaparak, yazılım tedarik zincirinizi güvence altına alıyorsunuz ve potansiyel riskleri minimize ediyorsunuz. Bu, özellikle GenAI araçlarının kullanımının arttığı günümüzde oldukça önemli bir süreçtir.

CI/CD için Sıfır güven güvenlik modeli - Zero trust security for CI/CD

Sıfır güven güvenlik modeli ve sürekli entegrasyon/sürekli dağıtım (CI/CD) süreçlerinin güvenliği hakkında konuşalım. Bu, yazılım geliştirme süreçlerinde çok önemli bir konudur ve basit bir şekilde açıklamak gerekirse şöyle düşünebiliriz:



Sıfır Güven Güvenlik Modeli Nedir?

Sıfır güven, adından da anlaşılacağı gibi, hiçbir şeye veya kimseye varsayılan olarak güvenmemek anlamına gelir. Bu, bir ağın veya sistemin her parçasının, güvenilir olarak kabul edilmeden önce doğrulanması gerektiği anlamına gelir.


CI/CD Nedir ve Neden Önemlidir?

CI/CD, yazılım geliştirme sürecinde kodun sürekli olarak entegre edilmesi (Continuous Integration) ve yayınlanması (Continuous Deployment) süreçleridir. Bu sistemler genellikle kaynak kodu, şifreler ve diğer hassas veriler gibi önemli bilgilere erişim gerektirir.


Sıfır Güven Güvenliğinin CI/CD'ye Uygulanması:


Kimlik Doğrulama: CI/CD pipeline'larınızı, doğrudan gizli bilgilere erişim vermek yerine, bulut sağlayıcınızla OIDC gibi federatif kimlik mekanizmaları üzerinden doğrulayın.

En Az Privilej İlkesi: Sınırsız erişime sahip "tanrı kullanıcı hesapları" yerine, kullanıcı veya runner hesaplarının erişimini minimize edin.

Efemer Kullanım: Runner'ları tekrar kullanmak yerine, her seferinde yenilerini kullanarak, önceki işlerden kalan sırların ifşa olma riskini veya zarar görmüş runner'larda iş çalıştırma riskini azaltın.

Güncellemeler: Ajan ve runner'larınızdaki yazılımları güncel tutun.

İzleme: CI/CD sistemlerinizin bütünlüğünü, gizliliğini ve kullanılabilirliğini, üretim yazılımınızı izler gibi izleyin.

Dış Kaynak Kullanımı: Kendi yönettiğiniz bir CI/CD altyapısına alışkınsanız, yönetilen hizmet kullanırken bu uygulamaları ihmal etmeyin. Yönetilen hizmetler, saldırı yüzeyini ve olası zararın boyutunu artırabilir.


Kısacası, sıfır güven güvenliği, CI/CD süreçlerindeki hassas verilere erişimi sıkı bir şekilde kontrol etmek ve sürekli olarak güvenlik önlemlerini güncel tutmak anlamına gelir. Bu yaklaşım, olası siber saldırıları önlemek için hayati öneme sahiptir.


Örnek bir senaryo verir misin?


Tabii ki, bir örnek senaryo ile sıfır güven güvenlik modelinin CI/CD süreçlerinde nasıl işlediğini açıklayabilirim:


Senaryo: Yazılım Geliştirme Ekibi

Kurum: ABC Yazılım Şirketi

Durum: ABC Yazılım, çeşitli müşteriler için web uygulamaları geliştiren bir şirkettir. Ekipleri, kodları sürekli entegre edip dağıtmak için CI/CD süreçlerini kullanırlar.


Problem

ABC Yazılım'ın CI/CD pipeline'ları, kaynak koduna, veritabanı şifrelerine ve API anahtarlarına erişim gerektiriyor. Bu bilgiler yanlış ellere geçerse büyük güvenlik sorunlarına yol açabilir.


Sıfır Güven Uygulaması

Kimlik Doğrulama:


Ekip, CI/CD pipeline'larını, şirketin bulut sağlayıcısı ile OIDC (Açık Kimlik Bağlantısı) üzerinden doğrulamak için yapılandırıyor. Bu, pipeline'ların doğrudan gizli bilgilere erişimini engelliyor.

En Az Privilej İlkesi:


Her kullanıcı ve runner için gereken minimum erişim seviyesi belirleniyor. Örneğin, bir veritabanı güncellemesi yapacak bir runner, sadece o veritabanına erişim hakkına sahip oluyor.

Efemer Runner Kullanımı:


Her yeni CI/CD işi için, önceden kullanılmamış ve temiz bir runner ortamı oluşturuluyor. Böylece, önceki işlerden kalan verilerin ifşa olma riski ortadan kalkıyor.

Yazılım Güncellemeleri:


CI/CD pipeline'larında kullanılan tüm araçlar ve runner'lar düzenli olarak güncelleniyor. Böylece, bilinen güvenlik açıklarına karşı koruma sağlanıyor.

Sürekli İzleme ve Kayıt:


Ekip, CI/CD sistemlerinin performansını, güvenlik durumunu ve kullanılabilirliğini sürekli olarak izliyor. Herhangi bir şüpheli etkinlik hemen tespit edilip müdahale edilebiliyor.

Sonuç

Bu uygulamalar sayesinde, ABC Yazılım'ın CI/CD süreçleri daha güvenli hale geliyor. Şirket, hem kendi verilerini koruyor hem de müşterilerine güvenli hizmet sunuyor. Sıfır güven modeli, herhangi bir iç veya dış tehdide karşı proaktif bir koruma katmanı sağlıyor.

Uyarı kuralları için birim test - Unit testing for Alerting rules

 "alerting rules için unit testing" yani "uyarı kuralları için birim testi" konseptini basit bir şekilde Türkçe olarak açıklayayım:



Bir yazılım ekibi olarak, sistemimizde bazen beklenmedik durumlar oluyor ve bu durumlarda doğru zamanda uyarı almak çok önemli. Mesela bir hata olduğunda, sistem otomatik olarak bizi uyarıyor. Bu uyarıları ayarlamak için belirli kurallar koyuyoruz. Ancak, bu kuralların gerçekten doğru çalışıp çalışmadığını anlamak zor olabilir.


İşte burada "alerting rules için unit testing" devreye giriyor. Bu yöntemle, bu uyarı kurallarını önceden test edebiliyoruz. Yani, gerçek bir sorun olmadan, bu kuralların nasıl çalıştığını kontrol ediyoruz. Böylece, kuralların doğru şekilde ayarlandığından daha emin olabiliyoruz. Bu yöntem sayesinde, gereksiz uyarılardan kaçınıp, gerçek sorunları daha iyi tespit edebiliyoruz.


Örneğin, Prometheus gibi araçlar bu tür testleri yapmamıza olanak tanıyor. Takımlarımız bu yöntemin gerçek durumlarda ne kadar faydalı olduğunu zaten rapor ediyorlar. Bu, özellikle yazılım geliştirme sürecinde önemli bir adım çünkü sistemlerimizin daha güvenilir ve hatasız çalışmasını sağlıyor.


Örnek bir senaryo verir misin?


Tabii ki, örnek bir senaryo vererek "uyarı kuralları için birim testi" konseptini daha iyi anlamanıza yardımcı olabilirim:


Senaryo: E-Ticaret Web Sitesi


Diyelim ki bir e-ticaret web sitesinin yazılım ekibinde çalışıyorsunuz. Web sitenizin sürekli olarak çalışır durumda olması gerekiyor çünkü müşterileriniz günün her saati alışveriş yapmak isteyebilir.


Uyarı Kuralı: Sunucu Yanıt Süresi


Uyarı Kuralı: Eğer sunucunuzun yanıt süresi 3 saniyeden fazla olursa, bir uyarı mesajı alırsınız.

Amaç: Müşterilerin siteyi hızlı ve verimli bir şekilde kullanabilmesini sağlamak.

Birim Testi:


Test Senaryosu: Sunucu yanıt süresini yapay olarak 5 saniyeye çıkarın.

Beklenen Sonuç: Uyarı sisteminin bu durumu tespit edip sizi uyarıyor olması.

Testin Amacı: Bu testle, gerçekten sunucu yavaşladığında uyarı sisteminin doğru şekilde çalışıp çalışmadığını kontrol edersiniz.

Neden Önemli?


Gerçek Dünya Durumu: Eğer bir gün sunucunuz gerçekten yavaşlarsa, bu durumu hemen fark edip müdahale edebilmeniz gerekiyor. Bu, müşteri memnuniyetini korumanız ve satış kaybını önlemeniz için kritik öneme sahip.

Birim Testinin Faydası: Bu test sayesinde, gerçek bir sorun yaşanmadan önce uyarı sisteminizin doğru şekilde çalıştığından emin olabilirsiniz. Ayrıca, gereksiz uyarıları önlemek için kural ayarlarınızı daha iyi kalibre edebilirsiniz.

Bu şekilde, birim testleri uygulayarak uyarı kurallarınızın gerçek durumlar için ne kadar hazır olduğunu kontrol edebilir ve sisteminizin güvenilirliğini artırabilirsiniz.

Borç üzerinden sağlık takibi - Tracking health over debt

Yazılım geliştirme sürecinde, genellikle "teknik borç" adı verilen, zamanla çözülmesi gereken sorunlar birikir. Bu, kodun eski veya verimsiz olması, kötü tasarım kararları veya eksik belgeler gibi çeşitli sebeplerden kaynaklanabilir. Geleneksel olarak, ekipler bu teknik borcu izleyip, zamanla düzeltmeye çalışırlar. Ancak, bu metin "sağlık derecesi" adı verilen bir kavramı öneriyor. Bu, yazılımın genel durumunu ve performansını ifade eder.




Önerilen yaklaşımda, ekipler sağlık derecesini diğer hizmet seviyesi hedefleri (SLO'lar) kadar önemli olarak görüyorlar ve buna göre iyileştirmeler yapıyorlar. Bu, sadece teknik borcu takip etmek yerine, yazılımın genel sağlığını göz önünde bulundurmayı içerir. Bu yaklaşım, en etkili sorunlara kaynak ayırarak uzun vadeli bakım maliyetlerini azaltmaya ve ürünleri daha verimli bir şekilde geliştirmeye yardımcı olur.


Ayrıca, bu yaklaşım teknik olmayan paydaşlarla teknik ekipler arasında daha iyi bir iletişim sağlar. Herkes yazılımın genel durumunu daha iyi anlar ve bu da ortak bir anlayışa katkıda bulunur. Farklı organizasyonlarda kullanılan ölçütler farklılık gösterse de, hepsi uzun vadeli sürdürülebilirliğe ve yazılımın rekabetçi ve uyarlanabilir kalmasına katkıda bulunur. Dijital dünyanın hızla değiştiği bir ortamda, sistemlerin sağlık durumunu borç üzerinden takip etmeye odaklanmak, onları korumak ve geliştirmek için yapılandırılmış ve kanıta dayalı bir strateji sunar.


Örnek bir senaryo verir misin?

Tabii ki, işte somut bir örnek:


Diyelim ki bir yazılım geliştirme ekibi, bir online alışveriş platformu üzerinde çalışıyor. Bu platform, zamanla çeşitli güncellemeler ve değişikliklerle büyümüş, ancak bu süreçte bazı teknik borçlar birikmiş. Örneğin, bazı kod parçaları eski ve verimsiz, bazı işlevler ise gereğinden fazla karmaşık.


Geleneksel Yaklaşım (Teknik Borcu İzleme):


Ekip, kodun eski ve verimsiz bölümlerini belirler ve bunları düzeltmeye odaklanır.

Bu süreçte, sadece belirli sorunları çözmeye odaklanırlar, genellikle acil olanları.

Bu yaklaşım, bazen sistemin genel performansını ve kullanıcı deneyimini göz ardı edebilir.

Sağlık Derecesini İzleme Yaklaşımı:


Ekip, sistemin genel sağlığını değerlendirmek için kapsamlı bir inceleme yapar. Bu, kodun kalitesini, sistemin performansını, kullanıcı deneyimini ve güvenlik durumunu içerir.

Sağlık derecesi düşük olan alanlara öncelik verilir. Örneğin, kullanıcı arayüzü yavaşsa veya sık sık hatalar oluşuyorsa, bu sorunlar önceliklidir.

Ekip, bu sorunları çözerken, hem kısa vadeli ihtiyaçları (hataları düzeltmek gibi) hem de uzun vadeli hedefleri (sistemin sürdürülebilirliğini ve esnekliğini artırmak gibi) dikkate alır.

Bu yaklaşım, yalnızca teknik borcu azaltmak yerine, sistemin genel sağlığını ve verimliliğini artırmayı hedefler. Böylece, platform hem şu anki kullanıcılar için daha iyi bir deneyim sunar hem de gelecekteki değişikliklere ve güncellemelere daha iyi uyum sağlar.

Risk temelli başarısızlık modellemesi - Risk-based failure modeling

Risk temelli başarısızlık modellemesi, bir sistemin nasıl başarısız olabileceğini, bu başarısızlıkların etkisini, olasılığını ve tespit edilebilirliğini anlamak için kullanılan bir süreçtir. Bu yöntem, özellikle karmaşık fiziksel sistemler geliştiren havacılık ve otomotiv gibi endüstrilerde 1940'lardan beri kullanılan başarılı bir teknik olan Arıza Modları ve Etkileri Analizi (FMEA) uygulamasına dayanır.




Bu süreç, öncelikle mümkün olan başarısızlık modlarını tanımlamakla başlar. Ekip daha sonra bir kök neden analizi yapar ve bir başarısızlık oluşma olasılığına, etkisinin büyüklüğüne ve başarısızlığın kök nedeninin tespit edilme ihtimaline göre puanlar atar. Bu sürecin, sistem geliştikçe çapraz fonksiyonel ekipler tarafından tekrar tekrar yürütülmesi en etkili yöntem olarak bulunmuştur.


Yazılım endüstrisinde de, özellikle insan sağlığı ve gizliliği gibi konular söz konusu olduğunda, yazılım başarısızlıklarının ciddi sonuçları olabilir. Bu nedenle, sistemlerin bu tür detaylı analizlerden geçmesi giderek daha fazla önem kazanmaktadır.


Güvenlik açısından bakıldığında, risk temelli başarısızlık modellemesi, tehdit modellemesi ve saldırı yol analizi gibi diğer yöntemlere iyi bir tamamlayıcı olabilir.


Örnek bir senaryo verir misin?


Tabii ki, risk temelli başarısızlık modellemesi ile ilgili basit ve anlaşılır bir örnek senaryo verebilirim:


Diyelim ki bir hava yolu şirketi için yeni bir uçuş rezervasyon sistemi geliştiriyorsunuz. Bu sistem, yolcuların uçuşları rezerve etmelerini, biletlerini alabilmelerini ve uçuş bilgilerini görüntüleyebilmelerini sağlayacak. Risk temelli başarısızlık modellemesini bu senaryoda nasıl uygulayacağınızı açıklayalım:


Başarısızlık Modlarının Tanımlanması: İlk adım, sistemin başarısız olabileceği yolları tanımlamaktır. Örneğin, sistemin çökmesi, yanlış uçuş bilgilerinin gösterilmesi veya ödeme işlemlerinin başarısız olması gibi durumlar olabilir.


Kök Neden Analizi: Her bir başarısızlık modu için, bu sorunların neden olabileceğini anlamak üzere bir kök neden analizi yapılır. Örneğin, sistem çökmesi sunucu kapasitesinin yetersiz olması nedeniyle olabilir.


Risk Skorlaması: Her bir başarısızlık modu için, oluşma olasılığı, etkisinin büyüklüğü ve tespit edilebilirliği üzerinden bir risk skoru hesaplanır. Örneğin, ödeme işlemlerinin başarısız olması yüksek etkiye sahip olabilir çünkü bu durum doğrudan gelir kaybına ve müşteri memnuniyetsizliğine yol açabilir.


Önlemlerin Planlanması ve Uygulanması: Yüksek risk skoruna sahip başarısızlık modları için önleyici tedbirler planlanır. Örneğin, sistem çökmesini önlemek için daha fazla sunucu kapasitesi eklenir veya ödeme işlemlerini doğrulamak için ek güvenlik kontrolleri getirilir.


Sürekli İyileştirme: Sistem geliştikçe ve değiştikçe, risk temelli başarısızlık modelleme süreci tekrar edilir ve güncellenir, böylece yeni riskler tespit edilir ve önlenir.


Bu senaryo, risk temelli başarısızlık modellemesinin, sistemin güvenilirliğini ve performansını artırmak için nasıl kullanılabileceğinin basit bir örneğidir. Bu yöntem, özellikle karmaşık sistemlerde, potansiyel sorunları önceden belirleyerek ve bunlara karşı önlemler alarak büyük faydalar sağlayabilir.

 

Risk-based failure modeling interview soruları ve cevapları

Risk temelli başarısızlık modellemesi ile ilgili bir mülakatta sorulabilecek tipik sorular ve olası cevapları şunlar olabilir:


Soru 1: Risk Temelli Başarısızlık Modellemesi Nedir ve Neden Önemlidir?

Cevap: Risk temelli başarısızlık modellemesi, bir sistemin çeşitli başarısızlık modlarının etkisini, olasılığını ve tespit edilebilirliğini değerlendiren bir süreçtir. Özellikle karmaşık sistemlerde, bu modelleme yöntemi, potansiyel sorunları önceden tespit etmeye ve bu sorunların sistem üzerindeki etkisini azaltmaya yardımcı olur. Bu, özellikle güvenlik, güvenilirlik ve performans gibi kritik faktörlerin önemli olduğu durumlarda hayati öneme sahiptir.


Soru 2: Arıza Modları ve Etkileri Analizi (FMEA) ile Risk Temelli Başarısızlık Modellemesi Arasındaki Fark Nedir?

Cevap: Arıza Modları ve Etkileri Analizi (FMEA), risk temelli başarısızlık modellemesinin bir bileşenidir. FMEA, özellikle başarısızlık modlarını ve bunların potansiyel etkilerini belirlemeye odaklanır. Risk temelli başarısızlık modellemesi ise daha geniş bir yaklaşım sunar ve başarısızlık modlarının yanı sıra bu modların olasılığını, etkisini ve tespit edilebilirliğini de kapsar.


Soru 3: Bir Projenin Erken Aşamalarında Risk Temelli Başarısızlık Modellemesi Nasıl Uygulanabilir?

Cevap: Bir projenin erken aşamalarında, ekip henüz tanımlanmamış potansiyel başarısızlık modlarını tahmin etmeye çalışır. Bu, benzer geçmiş projelerden elde edilen verilere, uzman görüşlerine ve mevcut sistem analizlerine dayanarak yapılır. Erken aşamada risk değerlendirmesi yapmak, projenin ilerleyen safhalarında karşılaşılacak riskleri azaltmaya yardımcı olur.


Soru 4: Risk Temelli Başarısızlık Modellemesi Sırasında En Sık Karşılaşılan Zorluklar Nelerdir?

Cevap: En sık karşılaşılan zorluklardan biri, başarısızlık modlarının ve bunların etkilerinin doğru bir şekilde tahmin edilmesidir. Ayrıca, özellikle yeni ve yenilikçi sistemlerde, yeterli tarihsel veri eksikliği de bir zorluk oluşturabilir. Başka bir zorluk, riskleri değerlendirirken ve önlemleri planlarken tüm ilgili paydaşları dahil etmektir.


Soru 5: Risk Temelli Başarısızlık Modellemesi Sürecinde Hangi Araçlar Kullanılır?

Cevap: Bu süreçte çeşitli analitik araçlar ve yazılımlar kullanılabilir. Örneğin, risk analizi ve yönetimi için kullanılan yazılımlar, başarısızlık modlarının ve etkilerinin modellenmesine, risk matrislerinin oluşturulmasına ve risk azaltma stratejilerinin planlanmasına yardımcı olur. Ayrıca, kök neden analizi yapmak için çeşitli kalite yönetim araçları ve teknikleri de kullanılabilir.

Bilgi İyileştirmeyle Geliştirilmiş Üretim - (RAG) Retrieval-Augmented Generation

"Retrieval-Augmented Generation" (RAG) yani "Bilgi İyileştirmeyle Geliştirilmiş Üretim" hakkında basit bir şekilde anlatayım. RAG, önceden eğitilmiş büyük dil modellerinin (LLM) mevcut bilgisini, belirli bir alan ya da endüstriyle ilgili özel ve bağlamsal bilgilerle zenginleştirmek için kullanılan bir tekniktir.




Bu işlem nasıl çalışır? Öncelikle, RAG'de nonparametrik hafızadan (genellikle bir vektör veri deposundan yapılan benzerlik aramasıyla) ilgili belgeler bir araya getirilir. Ardından, LLM'lerin parametrik hafızası kullanılarak, bu belgelerle tutarlı çıktılar üretilir. Yani, önce konuyla ilgili bilgiler toplanır, sonra bu bilgiler ışığında yeni metinler oluşturulur.


RAG, özellikle bilgi yoğun doğal dil işleme (NLP) görevleri için etkili bir yöntemdir. Bu görevler arasında soru cevaplama, özetleme ve hikaye oluşturma gibi işlemler bulunur. Özetle, RAG, büyük dil modellerinin var olan bilgisini, spesifik bir konu hakkında daha detaylı ve alakalı bilgilerle desteklemek için kullanılır.



Örnek bir senaryo 

Elbette, RAG (Retrieval-Augmented Generation) kullanımıyla ilgili bir örnek senaryo vereyim:


Senaryo: Tıbbi Araştırma Özeti Yazma


Diyelim ki bir sağlık teknolojisi şirketi, tıbbi araştırmaları özetleyen bir sistem geliştirmek istiyor. Bu sistem, tıbbi makalelerden ve araştırmalardan elde edilen bilgileri kullanarak, her bir araştırma için kısa ve net özetler oluşturacak.


Veri Toplama: Sistem, çeşitli tıbbi veri tabanlarından ve makale depolarından ilgili tıbbi makaleleri ve araştırmaları toplar. Örneğin, kanser tedavisiyle ilgili en son çalışmaları bulmak için bu depolarda arama yapar.


Bilgi İyileştirme: RAG teknolojisi devreye girer. Sistem, toplanan makalelerden önemli bilgileri çıkarır ve bu bilgileri bir veri havuzunda saklar. Bu aşama, makalelerin içeriğini analiz ederek, anahtar kavramlar, sonuçlar ve önemli bulgular gibi öğeleri belirler.


Dil Modeli Kullanımı: Daha sonra, önceden eğitilmiş bir dil modeli (LLM) kullanılarak, bu bilgiler temelinde anlamlı ve kapsamlı bir özet üretilir. Dil modeli, RAG tarafından sağlanan bağlamsal bilgileri kullanarak, her araştırmanın özünü yansıtan, okunması kolay ve anlaşılır bir özet oluşturur.


Sonuç: Sonuç olarak, sistem, kanser tedavisi üzerine yapılan bir araştırmanın detaylarını, bulgularını ve sonuçlarını kapsayan kısa bir özet sunar. Bu özet, araştırmanın ana fikirlerini yansıtır ve sağlık uzmanlarının, araştırmacıların veya ilgili okuyucuların hızlıca bilgi almasını sağlar.


Bu senaryoda, RAG kullanımı sayesinde, sistem sadece genel bilgilere dayalı değil, aynı zamanda spesifik ve güncel tıbbi bilgilere dayalı doğru ve detaylı özetler üretebilir. Bu, özellikle bilgi yoğun ve sürekli güncellenen alanlarda, bilgiye hızlı ve etkili bir şekilde ulaşmayı sağlar.


ChatGPT'de RAG kullanımı yapabiliyor muyuz?


ChatGPT : Hayır, benim mevcut sürümümde, yani ChatGPT'de, doğrudan Retrieval-Augmented Generation (RAG) kullanımı yoktur. ChatGPT, önceden eğitilmiş büyük bir dil modeline (LLM) dayanır ve bu eğitim sürecinde geniş bir veri setinden bilgi edinmiştir. Ancak bu bilgiler sabittir ve gerçek zamanlı olarak dış kaynaklardan yeni bilgi alıp entegre etme yeteneğim yoktur.


Bunun yerine, ChatGPT eğitim sürecinde edindiği bilgileri kullanarak soruları yanıtlar ve metin üretir. Bu, RAG'ın temel özelliği olan gerçek zamanlı bilgi alışverişi ve dış kaynaklardan gelen bilgilerle güncellenme yeteneğinden farklıdır. ChatGPT'nin bilgi tabanı, eğitim sırasında elde edilen bilgilerle sınırlıdır ve bu nedenle en son olaylar veya çok güncel bilgiler hakkında bilgi sağlayamayabilir.


Özetle, ChatGPT, RAG gibi dinamik bilgi alışverişine dayanan bir sistemi desteklemez; bunun yerine, önceden eğitilmiş ve belirli bir kesitte dondurulmuş bilgi setine dayanarak çalışır.


PDF yüklemesini destekliyorsun ama

ChatGPT : Evet, doğru. PDF dosyaları yükleyebilir ve yüklenen bu dosyalar üzerinde çeşitli işlemler yapabilirim. Örneğin, bir PDF'deki metni okuyabilir, belgedeki içeriği analiz edebilir ve belge hakkında sorularınızı yanıtlayabilirim. Ancak, bu işlevsellik Retrieval-Augmented Generation (RAG) ile karıştırılmamalıdır.


RAG, gerçek zamanlı olarak dış kaynaklardan veri çeken ve bu verileri dil modelinin ürettiği içerikle bütünleştiren bir sistemdir. Oysa benim PDF dosyalarıyla yaptığım işlemler, sadece o belgede yer alan bilgilere dayanır ve bu bilgiler, benim genel bilgi tabanımdaki bilgilerle birleştirilmez.


Yani, PDF dosyası yükleyerek belgedeki bilgileri kullanabilirim, ama bu, RAG teknolojisinin dinamik ve sürekli güncellenen veri alışverişini desteklemez. Yüklenen PDF dosyalarından elde edilen bilgiler, sadece o belgeyle sınırlı kalır ve genel bilgi tabanıma entegre edilmez.

ReAct prompting

ReAct prompting, bilgisayarın dil anlama sistemlerini (LLM) daha iyi kullanmasını sağlayan bir yöntemdir. 2022'de ortaya çıktı. Bu yöntem, bilgisayarın hem düşünmesini hem de eylemde bulunmasını içerir. Yani, bilgisayar hem mantıklı düşünüyor hem de bu düşüncelere göre hareket ediyor.



Bu yöntem sayesinde, bilgisayarlar sorulan sorulara daha net ve doğru cevaplar verebiliyor. Yanlış veya kafa karıştırıcı cevaplar vermeleri azalıyor.


Önceden, bu tür işler için "LangChain" adında bir araç kullanılıyordu. Ama şimdi OpenAI, bu işleri daha kolay yapabilmek için kendi sistemine bazı yeni özellikler ekledi.


Sonuç olarak, ReAct yöntemiyle çalışan bilgisayar programları, dil anlama konusunda daha başarılı oluyor ve kullanıcıların istedikleri bilgileri daha iyi alabiliyorlar. Bu yöntem, dil anlama teknolojisinin gelişmesinde önemli bir adım olarak görülüyor.


"ReAct prompting" yöntemi, Dil Modellemesi için geliştirilmiş bir tekniktir ve 2022'de tanıtılmıştır. Bu yöntem, mantıklı düşünme ve eylem yapma öğelerini bir araya getirir, bu yüzden "ReAct" (Reasoning and Action) adını almıştır. ReAct, Dil Modellemesi'ne (LLM) daha açıklayıcı ve daha az yanıltıcı cevaplar üretmesi için yardımcı olur. Böylece, kullanıcılar istedikleri sonuçları daha iyi elde edebilirler.


ReAct, "zincirleme düşünce" (Chain of Thought ya da CoT) gibi diğer yöntemlere göre bazı avantajlara sahiptir. Özellikle, LLM'lerin yanıltıcı cevaplar vermesini (hallüsinasyon) azaltmada etkilidir. Bu sayede, kullanıcıların istedikleri bilgiyi daha doğru bir şekilde alması sağlanır.


"LangChain" adlı bir araç, özellikle ReAct tarzı komutlar için geliştirilmişti. Ancak son zamanlarda, OpenAI bu tarz komutları daha kolay kullanabilmek için API'lerine fonksiyon çağırma özelliği ekledi. Bu sayede, LangChain gibi harici araçlara ihtiyaç kalmadan ReAct ve benzeri yöntemler kullanılabiliyor.


ReAct tabanlı otomatik ajanlar (yapay zeka yardımcıları), LLM uygulamalarının en yaygın kullanılan örnekleri arasında yer alıyor. Henüz bu alanın tam olarak tanımlanmış kuralları yok, ama şu ana kadar ReAct ve türevleri, LLM'lerin kullanımı açısından oldukça heyecan verici uygulamalar sunuyor.


Örnek bir senaryo


Diyelim ki bir kişi, akıllı asistanından (bir LLM kullanıyor) en yakın kütüphanenin açılış saatlerini öğrenmek istiyor. Normal bir LLM, doğrudan "En yakın kütüphane saat 9'da açılıyor" gibi bir cevap verebilir. Ancak bu cevap her zaman doğru olmayabilir çünkü asistan, kişinin bulunduğu yeri veya o günkü özel durumları göz önünde bulundurmayabilir.


ReAct prompting yöntemini kullanan bir asistan ise durumu daha kapsamlı değerlendirir:


Düşünme (Reasoning): Asistan, kullanıcının konumunu ve o günkü özel durumları (tatil günleri, olağanüstü durumlar vb.) göz önünde bulundurur. "Kullanıcı şu anda şehir merkezinde, bugün resmi bir tatil."


Eylem (Action): Ardından, bu bilgilere dayanarak en uygun eylemi belirler. "Şehir merkezindeki kütüphanenin tatil günlerindeki açılış saatlerini kontrol etmeliyim."


Sonuç: Son olarak, bu adımları takip ederek doğru ve güncel bilgiyi sağlar: "Bugün tatil olduğu için, şehir merkezindeki kütüphane saat 11'de açılıyor."


Bu şekilde, ReAct prompting yöntemi kullanan bir LLM, sadece doğru bilgiyi sağlamakla kalmaz, aynı zamanda bu bilgiye nasıl ulaştığını da açıklar, böylece kullanıcıya daha güvenilir ve anlaşılır bir deneyim sunar.



ReAct prompting 2023 gelişmeleri ve geleceği

ReAct yönlendirme, 2022'de ortaya çıkan ve 2023'te önemli gelişmeler gösteren bir yöntemdir. Bu yöntem, dil modellerinin yanıtlarının doğruluğunu zincirleme düşünce (CoT) gibi diğer yöntemlere göre artırmak amacıyla tasarlanmıştır ve akıl yürütme ile eylemi (bu nedenle "ReAct") birleştirir. Dil modellerinde uygulanması, yanıtlarını daha açıklayıcı ve hata yapma olasılığını azaltarak kullanıcılara daha iyi sonuçlar sunar.


2023'teki ReAct yönlendirmenin dikkate değer bir uygulaması, bankacılık müşteri hizmetleri chatbotları alanındadır. Bu chatbotlar, ReAct yönlendirmeyi kullanarak, yüksek bir anlama ve doğruluk seviyesiyle karmaşık müşteri sorgularını ele alabiliyorlar. ReAct yönlendirme, geri bildirim döngüleri ve dış veri kaynaklarıyla birlikte, konuşma yanıtı oluşturma için ince ayar yapılmış modelleri kullanıyorlar. Bu kapsamlı yaklaşım, chatbotların, ilgili tüm bağlam bilgilerini ve dış veri kaynaklarını (API'lar ve iç veritabanları gibi) dikkate alarak müşterileri sorguları boyunca etkili bir şekilde yönlendirmelerini sağlıyor.


ReAct çerçevesi, konuşma akışını yönetmede ve kullanıcının niyetiyle uyumlu bir sonuca yönlendirmede kritik bir rol oynuyor. Bu, bir dizi adımı içerir: görevi özetleyen bir düşünce yanıtı üretmek, veri çıkarmak için eylemleri gerçekleştirmek (API çağrıları veya veritabanı aramaları gibi) ve hatalar durumunda son yanıtı üretmek veya süreci tekrarlamak için gözlem kullanmak.


Bu çerçeve sadece bankacılıkla sınırlı değildir; e-ticaret ürün aramaları gibi çeşitli alanlarda uygulanabilir. E-ticarette ReAct yönlendirme, büyük ürün kataloglarını ve çeşitli ürün özelliklerini ele alabilir, chatbotun ayrıntılı ürün verilerini ve fiyatlandırma ve stok durumu gibi dinamik değişen detayları yönetmesini sağlar.


ReAct yönlendirmenin geleceği, karmaşık iş problemlerini ele alırken umut verici görünüyor. Bu problemler, detaylı müşteri sorgularını ele almak ve kişiselleştirilmiş yanıtlar sağlamak gibi konuları içerir. Dil modellerinin uygulanmasında önemli bir adımı temsil eden ReAct yönlendirme, daha doğru, bağlam farkındalığına sahip ve kullanıcıya özgü çözümler sunar.


ReAct yönlendirmesi ve uygulamaları hakkında daha detaylı bilgi için Width.ai ve Thoughtworks kaynaklarına göz atabilirsiniz​​​​.

"Terraform ile Monitor ve Alarmların Kurulumu" - Provision monitors and alerts with Terraform

"Terraform ile Monitor ve Alarmların Kurulumu" konusunu basit bir şekilde Türkçe olarak açıklayabilirim.



Terraform ve Altyapı Kodu (IaC) Nedir?

Altyapı Kodu (IaC): Altyapınızı (sunucular, ağlar, veritabanları vb.) kod kullanarak otomatik olarak kurmanızı ve yönetmenizi sağlar. Bu, manuel olarak her şeyi ayarlamak yerine, kod yazarak yapılabilir.

Terraform: Bu, IaC için yaygın olarak kullanılan bir araçtır. Bulut kaynaklarını (AWS, Azure, Google Cloud gibi) kod kullanarak oluşturmanızı ve yönetmenizi sağlar.

Terraform ile Monitor ve Alarmların Kurulumu

Genellikle, bulut ortamında çalışan uygulamalar için çeşitli hizmetler ve araçlar (örneğin, Splunk, Datadog, PagerDuty, New Relic) kullanılır. Bu hizmetler, uygulamanızın nasıl performans gösterdiğini izlemenize ve sorunları tespit etmenize yardımcı olur.

Ancak, bu hizmetlerin kurulumu ve yapılandırılması bazen karmaşık olabilir ve farklı araçlar kullanıldığında tutarsızlıklar oluşabilir.

Terraform ile Bu Hizmetlerin Kurulumu: Terraform, bu monitor ve alarm hizmetlerini de kod kullanarak kurmanıza olanak tanır. Yani, Splunk, Datadog gibi hizmetleri de Terraform kodları ile kurabilir ve yapılandırabilirsiniz.

Bu yaklaşım, tüm altyapınızı ve monitor hizmetlerinizi aynı yerden, tutarlı ve tekrarlanabilir bir şekilde yönetmenizi sağlar. Ayrıca, bu hizmetlerin yapılandırmasını kod üzerinden yapmak, yönetimi daha kolay ve anlaşılır hale getirir.

Dikkat Edilmesi Gerekenler

Terraform ile yapılandırdığınız sistemlerde, yapılandırmaları manuel olarak (kullanıcı arayüzleri veya API'lar üzerinden) değiştirmekten kaçınmalısınız. Çünkü bu, kod ile gerçek ortam arasında tutarsızlıklara yol açabilir.

Terraform kodunuzu, yapılandırmaların "tek gerçek kaynağı" olarak tutmak önemlidir. Bu, tüm değişikliklerin ve güncellemelerin kod üzerinden yapılması anlamına gelir.

Özetle, Terraform, sadece bulut kaynaklarını değil, aynı zamanda monitor ve alarm hizmetlerini de kurmak ve yönetmek için kullanılabilir. Bu, altyapınızı daha tutarlı, modüler ve yönetilebilir hale getirir.



Bu anlattıklarını örnek bir senaryo ve kodlarla açıklat mısın?


Elbette, Terraform kullanarak monitor ve alarmların nasıl kurulacağına dair bir örnek senaryo ve ilgili Terraform kodları ile açıklayabilirim.


Örnek Senaryo: Bir Web Uygulaması için Monitor ve Alarm Kurulumu

Durum

Bir web uygulaması bulutta çalışıyor ve uygulamanın sağlığını, performansını izlemek ve olası sorunlarda hızlıca haberdar olmak istiyorsunuz.

Bu amaçla, Datadog gibi bir izleme hizmetini kullanmayı planlıyorsunuz.

Amaç

Terraform kullanarak Datadog'da birkaç monitor ve alarm oluşturmak.

Bu monitorlar, web uygulamasının farklı metriklerini (örneğin, trafik, hata oranları) izleyecek.

Belirli bir eşiği aşan metrikler için alarmlar oluşturulacak.

Terraform Kodları

Datadog Provider'ını Yapılandırma


İlk olarak, Terraform için Datadog provider'ını (sağlayıcıyı) yapılandırmanız gerekiyor.


hcl

Copy code

provider "datadog" {

  api_key = "DATADOG_API_KEY"

  app_key = "DATADOG_APP_KEY"

}

Burada DATADOG_API_KEY ve DATADOG_APP_KEY, Datadog hesabınızdan alacağınız kimlik doğrulama anahtarlarıdır.


Bir Monitor Oluşturma


Web uygulamasının CPU kullanımını izlemek için bir monitor oluşturabilirsiniz.


hcl

Copy code

resource "datadog_monitor" "high_cpu" {

  name               = "Yüksek CPU Kullanımı - Web Uygulaması"

  type               = "metric alert"

  message            = "Web uygulamasında CPU kullanımı %{threshold}%'in üzerinde."

  escalation_message = "CPU kullanımı kritik seviyede!"


  query = "avg(last_5m):avg:aws.ec2.cpuutilization{app:webapp} > 80"


  notify_no_data    = false

  renotify_interval = 120


  thresholds {

    critical = 80

    warning  = 70

  }

}

Bu monitor, son 5 dakikada ortalama CPU kullanımının %80'in üzerine çıkması durumunda bir uyarı gönderir.


Bir Alarm Oluşturma


Hata oranlarını izlemek için bir başka monitor ve alarm oluşturabilirsiniz.


hcl

Copy code

resource "datadog_monitor" "high_error_rate" {

  name    = "Yüksek Hata Oranı - Web Uygulaması"

  type    = "metric alert"

  message = "Web uygulamasında hata oranı %{threshold}%'in üzerinde."


  query = "avg(last_10m):avg:webapp.errors{environment:production} > 5"


  notify_audit = true

  timeout_h    = 1


  thresholds {

    critical = 5

    warning  = 3

  }

}

Bu monitor, son 10 dakikada ortalama hata sayısının belirli bir eşiği aşması durumunda bir uyarı gönderir.


Önemli Noktalar

Bu kodlar, bir Datadog hesabınızın olduğunu ve Terraform ile bu hesabı yönetmek için gerekli anahtarların sağlandığını varsayar.

query kısmı, izlemek istediğiniz özgül metriklere göre değişebilir.

Her bir resource bloğu, Datadog'da bir monitor oluşturur ve belirlenen koşullar altında uyarılar gönderir.

Bu senaryo, Terraform kullanarak bulut ortamında bir web uygulaması için monitor ve alarmların nasıl oluşturulabileceğini göstermektedir. Benzer şekilde, diğer izleme hizmetleri ve farklı türde metrikler için de Terraform kodları yazabilirsiniz.


IAC nedit ve terroform hangi dili kullanır?


Infrastructure as Code (IaC) Nedir?

Infrastructure as Code (IaC), altyapı kaynaklarınızı (sunucular, ağlar, veritabanları vb.) manuel olarak kurmak ve yönetmek yerine, bu işlemleri kodlar aracılığıyla otomatik olarak yapmanızı sağlayan bir yöntemdir. IaC, bulut altyapısı, veri merkezleri ve diğer IT altyapıları için kullanılabilir. Bu yöntem, altyapıyı daha tutarlı, hızlı ve hatasız bir şekilde kurmanıza ve yönetmenize olanak tanır.


Terraform Hangi Dili Kullanır?

Terraform, HashiCorp tarafından geliştirilen ve geniş olarak kullanılan bir IaC aracıdır. Terraform, kendi özel dilini kullanır:


HashiCorp Configuration Language (HCL): Terraform, altyapı kaynaklarını tanımlamak için HCL (HashiCorp Configuration Language) adında bir dil kullanır. HCL, insan tarafından okunabilir ve yazılabilir bir yapıya sahiptir ve JSON ile uyumludur. Bu dil, altyapı kaynaklarını ve bu kaynakların birbirleriyle olan ilişkilerini tanımlamak için kullanılır.

Terraform ile yazılan HCL kodları, genellikle .tf uzantılı dosyalarda saklanır. Bu dosyalar, Terraform'un altyapınızı nasıl kuracağını ve yöneteceğini belirtir. HCL'in kullanımı oldukça basittir ve genellikle belirli bir altyapı sağlayıcısının (AWS, Azure, Google Cloud vb.) API'leriyle uyumlu şekilde tasarlanmıştır.


Özetle, Terraform, altyapı kaynaklarınızı kod olarak tanımlamanızı ve yönetmenizi sağlayan güçlü bir IaC aracıdır ve bu işlemleri yapmak için HashiCorp'un özel dili olan HCL'yi kullanır.


Bonus : Terraform ile kubernetes cluster kurabilir miyim?


Evet, Terraform ile Kubernetes cluster'ı kurabilirsiniz. Terraform, Kubernetes dahil olmak üzere çeşitli bulut sağlayıcıları ve teknolojiler için altyapı kurulumunu ve yönetimini otomatize etmek için kullanılabilir. Kubernetes cluster'ını kurmak için Terraform'ın sağladığı esneklik ve kodla yönetim avantajlarından yararlanabilirsiniz.


Terraform ile Kubernetes Cluster Kurulumu Nasıl Yapılır?

Terraform Provider'ını Yapılandırma: İlk adım, kullanacağınız bulut sağlayıcısı için Terraform provider'ını (örneğin, AWS, Azure, Google Cloud) yapılandırmaktır. Bu, Terraform'un bulut kaynaklarınızı yönetmesini sağlar.


Kubernetes Cluster Kaynaklarını Tanımlama: Terraform kodlarında, oluşturmak istediğiniz Kubernetes cluster'ı tanımlarsınız. Bu, cluster'ın düğümleri (nodes), ağ yapılandırması, güvenlik ayarları ve diğer konfigürasyon detaylarını içerir.


Terraform Planı ve Uygulaması: Terraform planı oluşturarak kurulumunuzu önceden gözden geçirebilir ve ardından terraform apply komutu ile cluster'ınızı kurabilirsiniz.


Kubernetes Konfigürasyonu: Cluster kurulduktan sonra, Kubernetes kaynaklarını (örneğin, podlar, hizmetler, yük dengeleyiciler) yönetmek için Kubernetes konfigürasyon dosyalarını kullanabilirsiniz.


Örnek Terraform Kodu

İşte AWS üzerinde bir Kubernetes cluster'ı kurmak için basit bir Terraform kodu örneği:


hcl

Copy code

provider "aws" {

  region = "us-west-2"

}


resource "aws_eks_cluster" "example" {

  name     = "example"

  role_arn = aws_iam_role.example.arn


  vpc_config {

    subnet_ids = [aws_subnet.example1.id, aws_subnet.example2.id]

  }

}


resource "aws_iam_role" "example" {

  name = "example"


  assume_role_policy = jsonencode({

    Version = "2012-10-17",

    Statement = [

      {

        Action = "sts:AssumeRole",

        Effect = "Allow",

        Principal = {

          Service = "eks.amazonaws.com"

        }

      },

    ]

  })

}


# ... Diğer AWS kaynaklarınız ve yapılandırmalarınız ...

Bu örnek, AWS EKS (Elastic Kubernetes Service) kullanarak bir Kubernetes cluster'ı kurmayı göstermektedir. Gerçekte, bu kodu kendi ihtiyaçlarınıza göre özelleştirmeniz ve eksiksiz bir yapılandırma sağlamanız gerekir.


Dikkat Edilmesi Gerekenler

Kubernetes cluster'ını kurarken, bulut sağlayıcınızın spesifik özelliklerini ve gereksinimlerini anlamak önemlidir.

Güvenlik ve ağ yapılandırmalarına özellikle dikkat etmelisiniz.

Terraform ile yapılan değişiklikler, özellikle büyük ve karmaşık altyapılarda dikkatli bir şekilde planlanmalı ve uygulanmalıdır.

GitHub Actions için OpenID Connect (OIDC) - OIDC for GitHub Actions

CI/CD (Sürekli Entegrasyon ve Sürekli Dağıtım) süreçlerinde sıfır güven güvenlik uygulamalarından biri olarak, bulut servislerine erişim için GitHub Actions (GitHub İşlemleri) gibi araçları OpenID Connect (OIDC) gibi federatif kimlik mekanizmaları üzerinden doğrulamak önerilir. GitHub Actions yaygın olarak kullanıldığı ve bu önemli teknik henüz yeterince kullanılmadığı için, OIDC'nin GitHub Actions için nasıl kullanılacağını özellikle belirtmek önemlidir. Böylece, bulut kaynaklarınız için uzun ömürlü erişim token'ları saklamaktan kaçınabilirsiniz ve işlemleriniz doğrudan gizli bilgilere erişim sağlamaz. Ancak, işlemlerin gerçekten en az ayrıcalıkla çalıştığından emin olmak için erişimi dikkatlice kapsamlandırmak önemlidir.



Bu açıklama, OIDC'nin GitHub Actions içinde nasıl kullanılacağı ve bunun CI/CD güvenliğine nasıl katkıda bulunacağı hakkında genel bir fikir vermektedir.


OIDC'nin GitHub Actions içinde nasıl kullanılacağını örnek bir senaruo ile anlatır mısın?


Elbette, OpenID Connect (OIDC) kullanarak GitHub Actions içinde bir CI/CD işlemi nasıl yapılır, bunu bir örnek senaryo ile açıklayabilirim.


Örnek Senaryo: Bulut Ortamında Bir Uygulamanın Dağıtımı

Adım 1: OIDC Sağlayıcısını Yapılandırma

Öncelikle, GitHub projeniz için bir OIDC sağlayıcısı (örneğin, AWS, Azure, Google Cloud) yapılandırmanız gerekiyor. Bu, GitHub Actions işlemlerinin bulut kaynaklarınıza güvenli bir şekilde erişmesine olanak tanır.

Bulut sağlayıcınızda, GitHub Actions için bir IAM rolü oluşturun ve bu role uygun izinler verin. Bu rol, GitHub Actions'ın kullanacağı kimlik bilgilerini temsil eder.

Adım 2: GitHub Actions İşlemi Oluşturma

GitHub reposuna bir .github/workflows dizini oluşturun ve içine bir işlem dosyası (örneğin, deploy.yml) ekleyin.

Bu işlem dosyasında, OIDC ile kimlik doğrulama yapacak adımları tanımlayın.

Adım 3: OIDC ile Kimlik Doğrulama ve Bulut Kaynaklarına Erişim

İşlem dosyanızda, öncelikle GitHub Actions'ın OIDC üzerinden kimlik bilgilerini almasını sağlayan adımları ekleyin. Bu adım, GitHub'ın oluşturduğu bir JWT (JSON Web Token) kullanarak bulut sağlayıcınızda bir geçici oturum açar.

Örneğin AWS için, aws-actions/configure-aws-credentials@v1 eylemini kullanarak geçici kimlik bilgilerini alabilir ve bu kimlik bilgilerini kullanarak AWS üzerinde işlemler gerçekleştirebilirsiniz.

İşlem dosyanızda, gerekli bulut kaynaklarına erişim sağlayacak ve uygulamanızı dağıtacak adımları ekleyin. Bu, bir Docker konteynerini bir ECS hizmetine dağıtmak, bir Lambda fonksiyonu güncellemek veya bir bulut veritabanına veri yüklemek gibi olabilir.

Adım 4: İşlemi Tetikleme ve İzleme

İşlemi, bir GitHub olayı (örneğin, bir push veya pull request) ile tetikleyin.

GitHub Actions arayüzünden işlemin durumunu izleyin. Eğer herhangi bir hata oluşursa, logları inceleyerek sorunu teşhis edin ve çözün.

Örnek deploy.yml İşlem Dosyası

yaml

Copy code

name: Deploy to Cloud


on:

  push:

    branches:

      - main


jobs:

  deploy:

    runs-on: ubuntu-latest

    steps:

      - name: Checkout Repository

        uses: actions/checkout@v2


      - name: Set up AWS Credentials

        uses: aws-actions/configure-aws-credentials@v1

        with:

          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole

          aws-region: us-east-1


      - name: Deploy to AWS

        run: |

          # Komutlarınızı buraya ekleyin (örneğin, AWS CLI kullanarak)

Bu örnek, GitHub Actions kullanarak AWS üzerine bir uygulama nasıl dağıtılacağını göstermektedir. Benzer şekilde, Azure, Google Cloud veya başka bir bulut sağlayıcısı için de işlemleri yapılandırabilirsiniz. Önemli olan, GitHub Actions'ın OIDC üzerinden güvenli ve geçici kimlik bilgileri alarak bulut kaynaklarınıza erişmesini sağlamaktır.


Yani Github üzerindeki bit projemi buluta deploy edecek vir ci/cd pipeline için gerekli bağlantıyı sağlamış mı oluyorum?



Evet, doğru anlamışsınız. GitHub üzerindeki bir projenizi buluta dağıtmak için bir CI/CD (Sürekli Entegrasyon ve Sürekli Dağıtım) pipeline'ı kurarken, OpenID Connect (OIDC) aracılığıyla bu bağlantıyı sağlamış oluyorsunuz. Bu yaklaşım, aşağıdaki avantajları sağlar:


Güvenli Kimlik Doğrulama: OIDC, GitHub Actions işlemlerinin bulut hizmetlerine erişimi için güvenli bir kimlik doğrulama mekanizması sağlar. Bu, uzun ömürlü erişim tokenları veya sabitlenmiş gizli anahtarlar kullanmak yerine, her işlem için geçici kimlik bilgileri oluşturur.


Sıfır Güven Yaklaşımı: Her işlem sadece gerekli olan en az ayrıcalık seviyesine sahip olacak şekilde yapılandırılır. Bu, güvenlik risklerini azaltmaya yardımcı olur.


Otomasyon ve Verimlilik: CI/CD pipeline'ı, kod değişikliklerinin otomatik olarak tespit edilmesi ve bu değişikliklerin bulut ortamınıza hızlı bir şekilde dağıtılmasını sağlar. Bu, manuel süreçlerin yerini alarak zaman tasarrufu sağlar ve hata oranını düşürür.


Esneklik ve Ölçeklenebilirlik: Bu yaklaşım, farklı bulut sağlayıcıları ve hizmetleri ile uyumludur ve projenizin ihtiyaçlarına göre ölçeklendirilebilir.


Özetle, GitHub üzerindeki projenizi buluta dağıtmak için bir CI/CD pipeline'ı kurarken, OIDC aracılığıyla güvenli ve verimli bir şekilde bulut kaynaklarıyla entegrasyon sağlamış olursunuz. Bu, modern yazılım geliştirme süreçlerinde yaygın bir uygulamadır ve güvenlik, otomasyon ve verimlilik açısından önemli avantajlar sunar.







"FAIR veri için veri ürünü düşüncesi" - Data product thinking for FAIR data

"FAIR veri için veri ürünü düşüncesi"ne özgü bir senaryo örneği verebilirim. Örnek olarak bir e-ticaret şirketini ele alalım ve bu şirketin müşteri satın alma verilerini düşünelim:



Senaryo: E-Ticaret Şirketi ve Müşteri Satın Alma Verileri


Durum: E-ticaret şirketi, müşterilerinin satın alma davranışları hakkında kapsamlı verilere sahip. Bu veriler, müşterilerin hangi ürünleri ne zaman satın aldıklarını, hangi kampanyalara nasıl tepki verdiklerini ve satın alma süreçlerindeki eğilimleri içerir.


Veri Ürünü Olarak Ele Alma: Şirket, bu verileri bir "veri ürünü" olarak ele alır. Yani, veriler sadece içsel bir kaynak değil, aynı zamanda şirketin diğer departmanları için değerli bir ürün haline gelir.


FAIR Prensipleri Uygulama:


Bulunabilir (Findable): Şirket, Collibra gibi bir veri kataloğu kullanarak, pazarlama, satış ve ürün geliştirme ekiplerinin bu verilere kolayca erişebilmesini sağlar.

Erişilebilir (Accessible): Veri, şirket içindeki yetkili kişilere açık ve erişilebilir durumdadır. Örneğin, bir API aracılığıyla veya şirketin iç ağında güvenli bir şekilde paylaşılır.

Birlikte Çalışabilir (Interoperable): Veriler, farklı sistemler ve ekipler tarafından kullanılabilir bir formatta sunulur, böylece farklı departmanlar bu verileri kendi ihtiyaçlarına göre analiz edebilir.

Yeniden Kullanılabilir (Reusable): Veriler, gelecekteki kampanyaları planlamak, müşteri eğilimlerini analiz etmek veya ürün stratejilerini şekillendirmek için yeniden kullanılabilir.

Veri Kalitesi ve Güvenilirlik: Şirket, Soda Core veya Great Expectations gibi araçlarla veri kalitesini sürekli olarak izler ve SLI metrikleriyle verinin güncellik, tamamlık ve tutarlılık durumunu raporlar.


Sonuç: Bu yaklaşım sayesinde, şirketin pazarlama ekibi, müşteri satın alma verilerini kullanarak daha etkili kampanyalar yürütebilir; ürün geliştirme ekibi, müşteri tercihlerine göre yeni ürünler tasarlayabilir ve satış ekibi, müşteri eğilimlerini daha iyi anlayarak satış stratejilerini optimize edebilir.


Bu senaryo, veri ürünü düşüncesinin ve FAIR prensiplerinin, verileri şirket içinde nasıl daha değerli ve işlevsel hale getirebileceğini gösterir.


 "FAIR veri için veri ürünü düşüncesi"ni basit bir şekilde Türkçe olarak açıklayayım:


"Veri ürünü düşüncesi" demek, veri kullanıcılarını müşteri gibi görmek ve onlara veri değer zinciri boyunca sorunsuz bir deneyim sunmak demektir. Bu, verinin kolayca bulunmasını, anlaşılmasını, güvenilir olmasını, erişilebilir olmasını ve tüketilebilir olmasını içerir.


Veri Ürünleri Yaklaşımı: Bu yaklaşım, veriyi bir ürün gibi ele almayı ve veriyle ilgilenen ekiplerin, bu veriyi tüm organizasyon içinde paylaşan ve yöneten işlevler arası takımlar oluşturmayı önerir.


FAIR Prensipleri: FAIR, "bulunabilir (findable), erişilebilir (accessible), birlikte çalışabilir (interoperable) ve yeniden kullanılabilir (reusable)" prensiplerinin kısaltmasıdır. Veri ürünü düşüncesi, bu prensipleri işletmeye almayı amaçlar.


Veri Katalogları ve Güvenilirlik: Örneğin, şirketler Collibra ve DataHub gibi veri katalogları kullanarak veri ürünlerinin keşfedilebilirliğini sağlar. Veri kalitesi ve SLI (Service Level Indicator) metriklerini yayınlayarak (örneğin, güncellik, tamamlık, tutarlılık) güven inşa eder. Soda Core ve Great Expectations gibi araçlar, veri kalitesi kontrollerini otomatikleştirir.


Veri Gözlemlenebilirliği: Veri gözlemlenebilirliği, Monte Carlo gibi platformlarla sağlanabilir.


Veri Ürünlerinin Evrimi: Zamanla, veri ürünleri, birden fazla kullanım durumu için yeniden kullanılabilir yapı taşları olarak gelişir. Bu, yeni kullanım durumları için pazara daha hızlı çıkış sürelerine yol açar.


Kısacası, veri ürünü düşüncesi, veriyi bir ürün gibi ele alarak, verinin kolay bulunabilir, erişilebilir, birlikte çalışabilir ve yeniden kullanılabilir olmasını sağlar. Bu yaklaşım, verinin değerini artırır ve şirketlerin veriden daha etkili bir şekilde faydalanmasını sağlar.

"Bağımlılık güncelleme PR'larının otomatik birleştirilmesi" - Automatic merging of dependency update PRs



"bağımlılık güncelleme PR'larının otomatik birleştirilmesi" konusunu basit bir şekilde Türkçe olarak açıklayayım:


Bir yazılım geliştirdiğinizi düşünün. Bu yazılım, başka yazılım parçalarına (bağımlılıklara) ihtiyaç duyar. Zamanla bu bağımlılıkların güncellenmesi gerekebilir çünkü eski sürümler güvenlik açıkları içerebilir.


Bağımlılık Güncellemeleri: Dependabot gibi araçlar, bu bağımlılıkları güncellemek için otomatik olarak "pull request" (PR) adı verilen güncelleme talepleri oluşturur. Bu PR'lar, yazılımın yeni ve daha güvenli sürümlerini içerir.



Otomatik Birleştirme: Normalde, bir mühendis bu PR'ları incelemeli ve manuel olarak birleştirmelidir. Ancak, bazı durumlarda, özellikle aktif geliştirme altında olmayan uygulamalar için, bu PR'ların hızlı bir şekilde ele alınması zor olabilir.


Kapsamlı Test Kapsamı: Otomatik birleştirme yapabilmek için, yazılımın geniş bir test kapsamına sahip olması gerekir. Bu, sadece birim testleri değil, aynı zamanda fonksiyonel ve performans testlerini de içerir.


Güvenlik Taraması: Ayrıca, bu testlerin hepsinin yapıldığı ve güvenlik taraması içeren bir yapı pipeline'ı olmalıdır.


Güven ve Otomasyon: Eğer tüm bu testler başarıyla geçerse ve ekip, pipeline'ın başarılı bir şekilde çalıştığında yazılımın üretime hazır olduğuna tam güven duyarsa, bağımlılık güncelleme PR'larını otomatik olarak birleştirmek mantıklıdır. Bu, hatta dolaylı bağımlılıklardaki büyük sürüm güncellemelerini de içerebilir.


Kısacası, yazılımınızın güvenliğini sağlamak ve sürekli güncel tutmak için, doğru test ve güvenlik kontrolleriyle otomatik olarak bağımlılık güncellemelerini yapmak, zaman kazandırır ve güvenlik risklerini azaltır.


Diyelim ki, "ABC Yazılım" adında bir şirketiniz var ve bu şirket, çeşitli müşterilere web tabanlı hizmetler sunuyor. Şirketinizin bir web uygulaması var ve bu uygulama, güvenliğini sağlamak ve performansını artırmak için çeşitli üçüncü parti yazılım kütüphanelerine (bağımlılıklara) ihtiyaç duyar.


Bağımlılık Güncellemeleri: Şirketinizin kullandığı bir kütüphanede güvenlik açığı tespit edilir. Bu durumda, Dependabot gibi bir araç otomatik olarak bir güncelleme PR'ı oluşturur. Bu PR, kütüphanenin güvenli bir sürümüne geçişi sağlamak için gereklidir.


Otomatik Testler ve Güvenlik Taraması: Şirketinizin yazılım geliştirme süreci, kodun güvenli ve hatasız olduğundan emin olmak için otomatik testler ve güvenlik taramaları içerir. Bu testler, her yeni PR ile tetiklenir ve uygulamanın yeni kodla da düzgün çalıştığını doğrular.


Otomatik Birleştirme: Testler ve güvenlik taramaları başarıyla tamamlandığında, sistem bu PR'ı otomatik olarak birleştirir. Bu, güncellemenin hızlı ve verimli bir şekilde yapılmasını sağlar, böylece güvenlik açığı hızla giderilir.


Üretime Yayın: Güncellenmiş uygulama, otomatik olarak üretime alınır ve müşterileriniz, güncellenmiş ve daha güvenli bir hizmet alır.


Bu senaryo, otomatik bağımlılık güncelleme PR'larının otomatik birleştirilmesinin nasıl çalıştığını gösterir. Bu süreç, yazılımınızın sürekli güncel ve güvenli kalmasını sağlar

Erişilebilirliğe duyarlı bileşen test tasarımı (Accessibility-aware component test design)

Diyelim ki bir web sitesi yapıyorsunuz ve bu sitede bir buton var. Normalde, bir web geliştiricisi olarak bu butonu test ederken, sadece butona tıklayıp tıklanmadığını kontrol edersiniz. Ancak, erişilebilirlik odaklı bir test yaklaşımında, işler biraz daha farklı ilerler.



ARIA Rolleri  nedir?


ARIA (Accessible Rich Internet Applications) Rolleri, web içeriğinin ve uygulamalarının engelli kullanıcılar, özellikle de ekran okuyucu gibi yardımcı teknolojileri kullanan kişiler için daha erişilebilir olmasını sağlamak amacıyla geliştirilmiş bir dizi özelliktir. ARIA, web geliştiricilerine HTML etiketlerine ek bilgiler ekleyerek, sayfaların yapısını ve kullanıcı arayüz bileşenlerinin işlevselliğini açıklamalarına olanak tanır.

ARIA rolleri, bir web sayfasındaki öğelerin (örneğin butonlar, bağlantılar, veya listeler) ne tür bir işlev gördüğünü açıklamak için kullanılır. Bu, ekran okuyucuların ve diğer yardımcı teknolojilerin, sayfanın içeriğini kullanıcıya doğru bir şekilde sunmasını sağlar. Örneğin, bir öğeye role="button" etiketi eklemek, bu öğenin bir buton olduğunu ve tıklanabilir olduğunu belirtir.

ARIA rolleri, HTML5'in sunduğu semantik etiketlerin (örneğin <nav> veya <article>) ötesine geçer ve web geliştiricilerine daha spesifik ve ayrıntılı işlevsellik tanımlama imkanı sunar. Bu, web sayfalarının farklı yeteneklere sahip kullanıcılar için daha anlaşılır ve erişilebilir olmasına yardımcı olur.

Özetle, ARIA rolleri, web içeriğinin daha kapsayıcı ve erişilebilir olmasını sağlamak için geliştiricilere güçlü araçlar sunar, böylece web teknolojileri herkes tarafından daha rahat kullanılabilir hale gelir.





ARIA Rolleri ve Semantik Nitelikler: Öncelikle, bu butonu sadece "id" veya "class" adıyla değil, ARIA rolü veya başka semantik nitelikler kullanarak tanımlarsınız. Örneğin, butona "role='button'" gibi bir ARIA rolü eklersiniz. Bu, ekran okuyucu gibi yardımcı teknolojilerin butonu "buton" olarak tanımasına ve kullanıcılara doğru bilgi vermesine yardımcı olur.


Fare Tıklamalarının Ötesindeki Etkileşimler: Sonra, sadece fare ile tıklama değil, klavye ile etkileşimi de test edersiniz. Örneğin, bir kullanıcı tab tuşu ile bu butona ulaşabilmeli ve enter tuşuyla tıklayabilmelidir. Bu, motor beceri engelli veya fare kullanamayan kişiler için önemlidir.


Test Çerçevelerinde Benimsenme: Diyelim ki bir web geliştirme ekibisiniz ve yeni bir web sayfası üzerinde çalışıyorsunuz. Bu sayfada, kullanıcıların bilgi girmesi için bir form var. Normalde, bu formu test ederken, form alanlarının doğru şekilde doldurulup doldurulmadığını kontrol edersiniz. Ancak, "Test Library" gibi bir test kütüphanesi kullanıyorsunuz ve bu kütüphane, erişilebilirlik testlerini kolaylaştıran bazı özellikler sunuyor. Örneğin, form alanlarının ekran okuyucular tarafından doğru bir şekilde tanınmasını sağlamak için semantik etiketlemeleri ve ARIA rollerini test etmenizi öneriyor. Bu özellikler sayesinde, testlerinizi daha kapsamlı bir şekilde yapabilir ve web sayfanızın daha geniş bir kullanıcı kitlesi tarafından erişilebilir olmasını sağlayabilirsiniz.



Deneme Halkasına Dahil Etme: Şimdi, ekibinizin teknoloji radarında bu yeni erişilebilirlik test yöntemini "Deneme" halkasına eklemeye karar verdiniz. Bu, ekibinizin bu yöntemi daha fazla deneyip geliştirmesi gerektiğini gösterir. Örneğin, bir sonraki projenizde bu yeni test yöntemini uygulayarak başlarsınız. Proje süresince, bu yöntemin etkinliğini değerlendirirsiniz. Eğer başarılı olursa, bu yöntemi standart test prosedürlerinizin bir parçası haline getirerek, gelecekteki tüm projelerinizde bu erişilebilirlik testlerini uygulamaya başlarsınız. Bu proaktif yaklaşım, web sitenizin daha erişilebilir ve kapsayıcı olmasını sağlar ve aynı zamanda ekibinizin sürekli olarak yeni ve etkili yöntemler öğrenmesine yardımcı olur.

Bu basit örnekte, geleneksel bir test sadece butonun tıklanabilir olup olmadığını kontrol ederken, erişilebilirlik odaklı bir test, butonun çeşitli kullanıcılar ve teknolojiler tarafından nasıl algılandığını ve kullanıldığını da göz önünde bulundurur. Bu yaklaşım, web sitenizin daha geniş bir kullanıcı kitlesine uygun olmasını sağlar ve herkesin sitenizi kolayca kullanabilmesine olanak tanır.

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo